筆記:深入探討 JavaScript 中的參數傳遞:call by value 還是 reference?


Posted by rockyooooooo on 2021-07-05

深入探討 JavaScript 中的參數傳遞:call by value 還是 reference?

參數傳遞

程式語言在傳遞參數的時候,一般分成兩種:

  1. Call By Value
  2. Call By Reference

Call By Value

傳遞的時候,把參數的傳過去,也就是直接拷貝一份一模一樣的,但跟原本的參數完全無關

function swap(a, b) {
    var temp = a
    a = b
    b = temp
}

var x = 5
var y = 10

swap(x, y)
console.log(x, y) // 5, 10

Call By Reference

傳遞的時候,傳的是參數的參考,改變 function 裡面的參數,外面的也會被影響

function add(obj) {
    obj.age++
}

var p1 = {age: 20}
add(p1)
console.log(p1.age) // 21

但其實 JavaScript 並沒有 Call By Reference,那怎麼解釋上面這個情況呢?

Call By Sharing

傳遞的時候,function 裡外的參數都是指向同一個物件,但若將 function 的參數重新賦值,外面的參數則不會被影響

function add(obj) {
    obj = {age: obj.age + 1}
}

var p1 = {age: 20}
add(p1)
console.log(p1.age) // 20

總結

JavaScript 只有 Call By Value,或者可以說 JavaScript 的 Primitive type 是 Call By Value,物件則是 Call By Sharing

參考資料

深入探討 JavaScript 中的參數傳遞:call by value 還是 reference?

tags: 筆記

#note #javascript







Related Posts

【HTML】HTML5 中的 data 屬性

【HTML】HTML5 中的 data 屬性

Linux Mint 21.1 VNC Setup

Linux Mint 21.1 VNC Setup

The prototype chain in JavaScript

The prototype chain in JavaScript


Comments